草庐IT

C++ sizeof 包装类

全部标签

c++ - 用 boost python 包装 C++ 模板类

我正在尝试用boothpython包装一个C++模板类。当前包装器出现错误。该程序基本上用于创建自定义vector并在python中使用它。#includetemplateclassallocator{public:T*allocate(size_t);voiddeallocate(T*,size_t);voidconstruct(T*,T);voiddestroy(T*);};templateclassvec{typedefT*iterator;typedefconstT*const_iterator;typedefsize_tsize_type;typedefTvalue_type

c++ - 使用 GNU 链接器包装 C++ 函数

我非常喜欢GNU链接器功能来包装函数。我通常使用它来模拟,例如非确定性函数调用,如rand()。考虑以下示例,我想为giveMeANumber编写单元测试://number.cppintgiveMeANumber(){returnrand()%6+1;}我可以像这样使用GNU链接器功能包装来包装对rand的调用://test.cppextern"C"int__wrap_rand(void){return4;}voidunitTest(){assertgiveMeANumber()==5;}$g++test.cpp-otestnumber.o-Xlinker--wrap=rand有没有办

c++ - sizeof 是否可以在 lambda 中应用于未捕获的变量,或者这是一个编译器错误?

这是讨论的跟进foundhere.以下代码在gcc和clang(livedemo)下编译。对于行//1中的情况,这是令人惊讶的,因为lambda不捕获任何内容。对于MCR2的情况,其中lambda返回指针本身,我们得到预期的编译时错误(行//Willnotcompile)。运算符sizeof的应用与返回指针有何不同?#include#defineMCR1(s)\([](){returnsizeof(s);})()#defineMCR2(s)\([](){returns;})()intmain(){auto*s="helloworld";autox1=MCR1(s);//1autoy1=

c++ - 为什么 sizeof Derived Class 是 8?

#includeusingnamespacestd;classEmpty{};classDerived:virtualpublicEmpty{charc;};intmain(){cout为什么size要来8我觉得应该是9,如果我将“c”声明为整数,那么它也将是8你能给我解释一下逻辑吗 最佳答案 大小依赖于实现,它取决于特定编译器实现如何实现虚拟化和填充。你不应该期望这个值是特定的东西。如果您想在程序中计算大小,只需使用sizeof即可。 关于c++-为什么sizeofDerivedCla

c++ - 是否可以使用 std::basic_string 作为 char* 的包装器?

我有第三方库返回由strdup(和分别是wcsdup函数)在其中创建的char*(和wchar_t*)。我想避免在代码末尾手动调用free。是否可以为std::basic_string编写一个分配器,以便它可以处理这个库返回的c字符串?理想情况下,我根本不想分配任何新内存并使用返回的内存块(字符串应该是常量)。 最佳答案 遗憾的是,std::string有自己的内存管理,不能重用分配的字符串。您可以将它们复制到std::string并立即删除它们,但这将调用您试图避免的所有行为。您可以做的是立即声明一个带有自定义删除器的unique

c++ - 为 RAII 包装 C 分配

我有这些来自库的纯C函数:structSAlloc;SAlloc*new_salloc();voidfree_salloc(SAlloc*s);有什么方法可以用C++将其包装到智能指针(std::unique_ptr)或RAII包装器中?我主要对标准库的可能性感到好奇,而无需创建自己的包装器/类。 最佳答案 是的,您可以为此重用unique_ptr。只需制作一个自定义删除器即可。structsalloc_deleter{voidoperator()(SAlloc*s)const{free_salloc(s);//whatthehec

c++ - Visual C++ 中的 sizeof ("...") 让我不开心

我正在写一段代码,其中我使用sizeof("somestring")作为函数的参数,然后我注意到函数没有返回预期值,所以我去看了相应的asm代码,我发现了一个不愉快的惊喜。有人对此有解释吗(见图片)?我知道有1000多种不同的方法可以做到这一点,我已经实现了其中的另一种,但我确实想知道这种行为背后的原因。出于好奇,这是VisualStudio2008SP1。 最佳答案 值5是正确的。该常量包括零终止符字节。监window口中显示的4是看起来不正确的那个。 关于c++-VisualC++中

c++ - 使用 SWIG 将 C++ <vector> 包装为 python NumPy 数组

我有一个C++库,它定义了以下(以及更多类似的)类型:typedefstd::vectorDoubleVec;typedefstd::vectorDoubleVecVec;typedefstd::vectorIntVec;typedefstd::vectorIntVecVec;我正在尝试为处理此类对象的库创建一个python接口(interface)。正如标题所述,我希望我的界面能够与C++std::vector和numpyndarray相互转换。我都看过numpy.i由numpy人和std_vector.i提供来自SWIG人。问题在于numpy.i是为处理C/C++数组(而非C++v

c++ - 当包含在另一个 vector 中时如何使用 vector 包装类?

考虑一个来自第三方库的免费函数,它需要一个std::vector作为参数:voidfoo(std::vector&);现在,我围绕这种类型编写了一个包装器,以便我可以添加成员函数。能够使用foo()对于那种类型,我添加了一个访问函数。classWrapper{private:std::vector_data;public:std::vector&data(){return_data;}conststd::vector&data()const{return_data;}//...otherstuff};这样,我仍然可以使用foo():Wrappera;foo(a.data());但现在考

c++ - libev C++ 包装器 function_thunk

voidset_(constvoid*data,void(*cb)(EV_P_ev_watcher*w,intrevents))throw(){this->data=(void*)data;ev_set_cb(static_cast(this),cb);}//functioncallbacktemplatevoidset(void*data=0)throw(){set_(data,function_thunk);}templatestaticvoidfunction_thunk(EV_P_ev_watcher*w,intrevents){function(*static_cast(w)